/****************************************************************
 **  Nombre: DAOInformacionPersonal.java                          *
 **  Version: 1.0.1                                             *
 **  Diagrama: GAPI v2.2.0                                      *
 **  Autor: Alberto Castro                        *
 **  Creado: 30-enero-2013
 *   Caso de uso: MWM1
 **  Modificado:02-Febrero-2013 (Alonso Orozco)                                                *
 ***************************************************************/
package DAO;

import AccesoBD.AccesoBaseDatos;
import Dominio.Persona;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * Clase encargada de ejecutar las operaciones sobre base de datos de la tabla informacionpersonal.
 */
public class DAOInformacionPersonal {

    private static final String TABLA_INFORMACION_PERSONAL = "informacionpersonal";
    private static final String COLUMNA_ID_INFORMACION = "id_informacion";
    private static final String COLUMNA_NOMBRES = "nombres";
    private static final String COLUMNA_APELLIDO_PATERNO = "apaterno";
    private static final String COLUMNA_APELLIDO_MATERNO = "amaterno";
    private AccesoBaseDatos acceso = new AccesoBaseDatos();
    private Connection conexion = null;

    /**
     * Método constructor encargado de abrir la conexión a la base de datos
     */
    public DAOInformacionPersonal() {
        this.conexion = acceso.abrirConexion();
    }

    /**
     * Método que registra una persona
     * @param persona - la persona a registrar
     * @return la clave obtenida al registrar la perosna
     */
    public int registrarPersona(Persona persona) {
        int clave = -1;
        
        try {                                                    
            String nombres = persona.getNombres();
            String apellidoPaterno = persona.getApellidoPaterno();
            String apellidoMaterno = persona.getApellidoMaterno();            

            Statement sentencia = acceso.crearSentenciaBD(conexion);
            String queryInsertar = "INSERT INTO " + TABLA_INFORMACION_PERSONAL + " (" + COLUMNA_NOMBRES + ", "
                    + COLUMNA_APELLIDO_PATERNO + ", " + COLUMNA_APELLIDO_MATERNO + ") VALUES ('" + nombres + "', '" + apellidoPaterno + "', '"
                    + apellidoMaterno + "');";
            sentencia.executeUpdate(queryInsertar, Statement.RETURN_GENERATED_KEYS);
            
            ResultSet resultSet = sentencia.getGeneratedKeys();                    

            if(resultSet.next()){
                clave = resultSet.getInt(1);
            }                              
        } catch (SQLException ex) {
            System.out.println("Ocurrió un problema al tratar de registrar a la persona");
            ex.printStackTrace();
        }
         return clave;
    }

    /**
     * Método encargado de cerrar la conexión a la base de datos
     */
    public void cerrarConexionAPersonas() {
        acceso.cerrarConexion(conexion);
    }

    /**
     * Método encargado de buscar la información personal de una cuenta
     * con base en la clave de la informacion personal
     * @param clv_infoPersonal - la clave de informacion peronal
     * @return Resulset conteniendo la informacion personal de una cunta
     */
    public ResultSet buscarInfoPersonal(int clv_infoPersonal) {
        ResultSet resultado = null;

        try {
            Statement sentencia = acceso.crearSentenciaBD(conexion);
            String querySearch = "SELECT * FROM " + TABLA_INFORMACION_PERSONAL + " WHERE " + COLUMNA_ID_INFORMACION + " = '" + clv_infoPersonal + "' ";
            resultado = sentencia.executeQuery(querySearch);

        } catch (SQLException ex) {
            System.out.println("Ocurrió un problema al tratar de buscar la cuenta");
        }

        return resultado;
    }

    /**
     * Método encargado de actualizar la información personal de una cuenta
     * @param clv_infoPersonal - la clave de la información perosna.
     * @param nombre- el nombre nuevo
     * @param apellido1 - el apellido paterno nuevo
     * @param apellido2 - el apeellido materno nuevo
     */
    public void actualizarInformacionPersonal(int clv_infoPersonal, String nombre, String apellido1, String apellido2) {
        try {
            Statement sentencia = acceso.crearSentenciaBD(conexion);
            String queryUpdate = "UPDATE " + TABLA_INFORMACION_PERSONAL + " SET " + COLUMNA_NOMBRES + " = '" + nombre 
                    + "', " + COLUMNA_APELLIDO_PATERNO + " = '" + apellido1 + "', " 
                    +  COLUMNA_APELLIDO_MATERNO + " = '" + apellido2 + "'"+ 
                   "WHERE " + COLUMNA_ID_INFORMACION + " = '" + clv_infoPersonal + "';";
            sentencia.executeUpdate(queryUpdate);
        } catch (SQLException ex) {
            System.out.println("Ocurrió un problema al tratar de actualizar la informacion personal del alumno");
        }
    }
/**
 * Elimina la informacion personal del alumno
 * @param claveInformacionPersonal  Clave de informacion personal del alumno
 */    
    public void eliminarInformacionPersonal(int claveInformacionPersonal) {
        try {
            Statement sentencia = acceso.crearSentenciaBD(conexion);
            String queryEliminacion = "DELETE FROM " + TABLA_INFORMACION_PERSONAL + " WHERE "
                    + COLUMNA_ID_INFORMACION + " = '" + claveInformacionPersonal+ "';";
            sentencia.executeUpdate(queryEliminacion);
        } catch (SQLException ex) {
            Logger.getLogger(DAOInformacionPersonal.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    /**
     * Obtiene el nombre completo del usuario
     * @param claveInformacionPersonal Clave de informacion personal del usuario
     * @return El nombre completo del usuario
     */
    public String obtenerNombreCompletoDeUsuario(int claveInformacionPersonal) {
        String nombreCompleto = "";

        try {
            Statement sentencia = acceso.crearSentenciaBD(conexion);
            String querySearch = "SELECT * FROM " + TABLA_INFORMACION_PERSONAL + " WHERE " + COLUMNA_ID_INFORMACION + " = '" + claveInformacionPersonal+ "' ";
            ResultSet resultado = sentencia.executeQuery(querySearch);

            while(resultado.next()) {
                String nombres = resultado.getString(2);
                String apellidoPaterno = resultado.getString(3);
                String apellidoMaterno = resultado.getString(4);
                
                nombreCompleto = nombres+" "+apellidoPaterno+" "+apellidoMaterno;
            }
            
        } catch (SQLException ex) {
            System.out.println("Ocurrió un problema al tratar de buscar la cuenta");
        }
        
        return nombreCompleto;
    }
}
